package com.hbnu.common.factory;

import com.hbnu.common.entity.User;
import com.hbnu.common.service.LoginService;
import com.hbnu.common.service.RegisterService;
import com.hbnu.common.service.MainService;
import com.hbnu.common.service.impl.LoginServiceImpl;
import com.hbnu.common.service.impl.MainServiceImpl;
import com.hbnu.common.service.impl.RegisterServiceImpl;

/**
 * 服务（Service）工厂类，统一创建和组装Service接口的实现类实例。
 * 该工厂负责协调Service与DAO之间的依赖关系，使上层调用者（如Controller）无需关心底层实现细节。
 */

public class ServiceFactory {
    private static LoginService loginService;
    private static RegisterService registerService;

    /**
     * 私有构造方法，防止被实例化
     */
    private ServiceFactory() {}

    /**
     * 获取 LoginService 接口的单例实现。
     * @return LoginService 实例
     */
    public static synchronized LoginService getLoginService() {
        if (loginService == null) {
            loginService = new LoginServiceImpl(DaoFactory.getUserDao());
        }
        return loginService;
    }

    /**
     * 获取 RegisterService 接口的单例实现。
     * @return RegisterService 实例
     */
    public static synchronized RegisterService getRegisterService() {
        if (registerService == null) {
            registerService = new RegisterServiceImpl(DaoFactory.getUserDao());
        }
        return registerService;
    }

    /**
     * 获取 MainService 接口的新实例。
     * <p>
     * MainService 持有特定用户状态，因此每次调用都会创建新实例。
     *
     * @param loginUser 当前登录的用户信息
     * @return MainService 新实例
     */
    public static MainService getMainService(User loginUser) {
        return new MainServiceImpl(
                loginUser,
                DaoFactory.getUserDao(),
                DaoFactory.getCheckInItemDao()
        );
    }
}
